#ifndef VLCKITS_H
#define VLCKITS_H

#include <QObject>
#include <vlc/vlc.h>
#include <vector>
using std::vector;

//* @class VLCKits
//* @brief VLC媒体播放核心类，封装VLC库的底层操作，提供播放控制接口
//* @details 负责VLC实例初始化、媒体播放/暂停/停止、音量调节、进度控制等核心功能，
//*          通过信号槽与UI层（如VLCWidget）交互，实现UI与业务逻辑分离
//*
class VLCKits : public QObject
{
    Q_OBJECT
public:
    explicit VLCKits(QObject *parent = nullptr);
    ~VLCKits();
//  **
//  * @brief 初始化VLC环境
//  * @return 初始化成功返回true，失败返回false
//  * @details 创建VLC实例、媒体播放器、事件管理器，并注册播放相关事件回调
//  */
    bool initVLC();
    bool playURL(const QString &name, void *hwnd);
//@brief 播放播放列表中的多个媒体文件
//@param names 媒体文件路径列表
//@param hwnd 播放窗口句柄（绑定视频渲染窗口）
//@return 播放成功返回true，失败返回false
//@details 1. 创建媒体列表播放器和媒体列表
//         2. 遍历文件列表，创建媒体对象并添加到列表
//         3. 配置播放模式（循环播放）并关联播放器
//         4. 绑定播放窗口并开始播放
    bool play(const QStringList & names, void * hwnd);
    bool play(const QString &name,void *hwnd);
    void play();
    void pause();
    void stop();
    void setVolume(int value);
    void setPosition(int value);
    libvlc_media_player_t *mediaPlayer()const{return _pMediaPlayer;}
    libvlc_time_t durations()const{return _totalSec;}
    void setTimeSliderPos(int value);
    void setTimeText(const QString &str);
    void setVolumePos(int value);


//    /**
//     * @brief 更新当前播放索引（用于播放列表导航）
//     * @details 索引自增并通过取模运算实现循环（超过列表长度时回到0）
//     */
    void addMediaIndex();
    int currentIndex() const {  return _currentIndex;   }
    const vector<libvlc_time_t> & durationArr() const
    {   return _durationArr;    }

signals:
    void sigTimeSliderPos(int value);
    void sigTimeText(const QString &str);
    void sigVolumeSliderPos(int value);
private:
    libvlc_instance_t *   _pInstance=nullptr;
    libvlc_media_t*       _pMedia=nullptr;
    libvlc_media_player_t* _pMediaPlayer=nullptr;
    libvlc_event_manager_t* _pEventManager=nullptr;
    libvlc_time_t _totalSec=0;
    //添加的数据成员
    libvlc_media_list_player_t * _pMediaListPlayer = nullptr;
    libvlc_media_list_t *        _pMediaList = nullptr;
    vector<libvlc_time_t>       _durationArr;
    int _currentIndex = -1;//表示当前播放的媒体下标
};

#endif // VLCKITS_H
